package util

import (
	jsoniter "github.com/json-iterator/go"
)

// 数据转换为json
// 当这个方法出现问题，没有很好的提示，可以尝试使用官方的json.Marshal(data)
func ToJson(data any) (dataJson string, err error) {
	json := jsoniter.ConfigCompatibleWithStandardLibrary
	// 编码为 JSON
	jsonData, err := json.Marshal(data)
	//再把byte数组转为json串
	dataJson = string(jsonData)
	return
}

// json转换为指定数据类型
func JsonTo[T any](dataJson any) (data T, err error) {
	json := jsoniter.ConfigCompatibleWithStandardLibrary
	var dataBytes []byte
	switch v := dataJson.(type) {
	case string:
		dataBytes = []byte(v)
	case []byte:
		// fmt.Println("JsonTo参数字符串值：", string(v))
		dataBytes = v
	default:
		var dataStr string
		dataStr, err = ToString(v)
		if err != nil {
			return
		}
		dataBytes = []byte(dataStr)
	}
	err = json.Unmarshal(dataBytes, &data)
	return
}
